/*
 * @Author: 吴世扬 18368095041@163.com
 * @Date: 2025-02-10 10:34:23
 * @LastEditors: 吴世扬 18368095041@163.com
 * @LastEditTime: 2025-02-25 15:43:10
 * @FilePath: /vue3-admin-server/src/main.ts
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import { HttpAdapterHost, NestFactory } from '@nestjs/core';
import { ValidationPipe } from '@nestjs/common';
import * as cookieParser from 'cookie-parser';
import { Logger } from 'winston'; // 添加: 引入 Winston 的 Logger
import { WINSTON_MODULE_PROVIDER } from 'nest-winston'; // 添加: 引入 Winston 模块的提供者名称

import { AppModule } from './app.module';
import { CatchEverythingFilter } from './common/filters/CatchEverythingFilter';

const bootstrap = async () => {
    const app = await NestFactory.create(AppModule);
    app.useGlobalPipes(
        new ValidationPipe({
            skipMissingProperties: true, // 如果设置为 true，则验证器将跳验证对象中所有为 null 或未定义的属性的验证
            whitelist: true // 如果设置为 true，验证器将删除已验证（返回）对象的任何不使用任何验证装饰器的属性。
            // exceptionFactory(errors) {
            //     console.log(errors)
            // }
        })
    );
    const httpAdapterHost = app.get(HttpAdapterHost);
    const logger = app.get<Logger>(WINSTON_MODULE_PROVIDER); // 添加: 获取 Winston 的 Logger 实例
    app.useGlobalFilters(new CatchEverythingFilter(httpAdapterHost, logger)); // 修改: 传递 Logger 实例
    app.use(cookieParser());
    await app.listen(process.env.PORT ?? 3000);
};
bootstrap();
